Qt应用开发(基础篇) | 您所在的位置:网站首页 › resize bar在哪里打开 › Qt应用开发(基础篇) |
一、前言
QMenuBar类继承于QWidget,该类提供了一个水平菜单栏。 QMenuBar菜单栏,顾名思义是菜单QMenu和动作QAction的容器,一般在软件的顶部经常会见到它。菜单栏包含了一系列下拉的菜单,使用addMenu()函数添加QMenu菜单,使用addAction()函数添加QAction动作。菜单栏不需要布局,它会自动将自己的几何图形设置到父类控件的顶部,并在父类控件调整大小同步调整自身。 创建主窗口QMainWindows样式的程序中,它自带了菜单栏,使用menuBar()可以得到菜单栏QMenuBar指针,然后你就可以直接添加QMenu或者QAction,例如: QAction *newAct = new QAction("copy"); QMenu *fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct);而QMenu对与文本、图标、小部件和操作action的应用,请参考我另一篇文章,这里就不多介绍了。 菜单 QMenu MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QMenu *menu = new QMenu(); QAction *copyAcy = menu->addAction(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)),"copy",this,SLOT(onCopyTriggered()),QKeySequence(Qt::CTRL + Qt::Key_C)); menu->addAction("cut"); menu->addSeparator(); QMenu *sub_menu = new QMenu("help"); menu->addMenu(sub_menu); menu->addMenu(sub_menu); sub_menu->addAction("about"); connect(menu,&QMenu::triggered,[=](QAction *action *action){ if(action == copyAcy) { qDebug()addMenu(menu); this->menuBar()->addMenu("编辑(E)"); } void MainWindow::onCopyTriggered() { qDebug()addMenu("编辑(E)"); QAction *testAct = this->menuBar()->addAction("调试(D)"); qDebug()actionGeometry(testAct).x() actionGeometry(testAct).y() actionGeometry(testAct).width() actionGeometry(testAct).height(); 3)addAction添加一个动作action,可以直接指定动作触发的时候接收的槽函数,参考上例。 QAction *addAction(const QString &text) QAction *addAction(const QString &text, const QObject *receiver, const char *member) QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method) QAction *addAction(const QString &text, Functor functor) 4)addMenu添加一个菜单menu。 QAction *addMenu(QMenu *menu) QMenu *addMenu(const QString &title) QMenu *addMenu(const QIcon &icon, const QString &title) 5)insertMenu在某个动作action之前插入一个菜单menu。 QAction *insertMenu(QAction *before, QMenu *menu) 6)insertSeparator在某个动作action之前插入一个分隔符。 QAction *insertSeparator(QAction *before) 7)addSeparator添加一个分隔符。 QAction *addSeparator() 8)clear清除全部的菜单menu和动作action。 void clear() 9)cornerWidget返回位于第一个菜单项左侧或最后一个菜单项右侧的小部件,具体取决于角落。 QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const 10)cornerWidget将小部件设置为直接显示在第一个菜单项的左侧,或显示在最后一个菜单项的右侧 void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)在上面的示例中添加一个toolbutton作为角落小部件: QToolButton *btn = new QToolButton(); btn->setIcon(QIcon(QApplication::style()->standardIcon(QStyle::SP_TitleBarMenuButton))); this->menuBar()->setCornerWidget(btn,Qt::TopLeftCorner);设置某一个动作action为激活状态。 void setActiveAction(QAction *act)这个信号在菜单操作被高亮显示时触发,action是导致事件被发送的动作,通常用于更新状态信息。 void hovered(QAction *action) 2)hovered当鼠标点击触发属于该菜单栏的菜单中的动作时,触发该信号,action是引起信号触发的动作。 注意:QMenuBar必须拥有QMenu的所有权才能使此信号工作。 void triggered(QAction *action) |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |